package com.tcc.util_xbenben.utils;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 数字工具类
 *
 * @author tcc
 */
public class NumUtil {

    // 数字正则表达式
    private static final String NUMBER_REG = "^\\d+$";
    // 实数正则表达式（是有理数和无理数的总称）
    private static final String REAL_REG = "^(-)?[0-9]+(\\.[0-9]+)?$";

    // 1-1 判断传入字符串是否全为数字(只能判断正整数)
    // "3.2837283"
    public static boolean isNum(String param) {
        if (!StringUtil.hasText(param)) {
            return false;
        }
        return param.matches(NUMBER_REG);

    }

    // 1-2 判断传入的字符串是否全为实数（正数、负数、有理数、无理数）
    public static boolean isReal(String param) {
        if (!StringUtil.hasText(param)) {
            return false;
        }
        return param.matches(REAL_REG);
    }

    // 3、BigDecimal 类型做精准的加法运算
    public static double add(double v1, double v2) {
        // 换成精准类型
        BigDecimal bd1 = new BigDecimal(v1 + "");
        BigDecimal bd2 = new BigDecimal(v2 + "");
        return bd1.add(bd2).doubleValue();
    }

    // 4、减法运算
    public static double sub(double v1, double v2) {
        // 换成精准类型
        BigDecimal bd1 = new BigDecimal(v1 + "");
        BigDecimal bd2 = new BigDecimal(v2 + "");
        return bd1.subtract(bd2).doubleValue();
    }

    // 5、乘法运算
    public static double mul(double v1, double v2) {
        // 换成精准类型
        BigDecimal bd1 = new BigDecimal(v1 + "");
        BigDecimal bd2 = new BigDecimal(v2 + "");

        return bd1.multiply(bd2).doubleValue();
    }

    // 6、除法运算
    public static double div(double v1, double v2, int scale) {
        // 换成精准类型
        BigDecimal bd1 = new BigDecimal(v1 + "");
        BigDecimal bd2 = new BigDecimal(v2 + "");
        // 常用的舍位方式：四舍五入
        return bd1.divide(bd2, scale, RoundingMode.HALF_UP).doubleValue();
    }

    // 7、提供精确的小数位四舍五入处理
    public static double round(double v, int scale) {
        BigDecimal bd = new BigDecimal(v + "");
        return bd.setScale(scale, RoundingMode.HALF_UP).doubleValue();
    }


}
